home *** CD-ROM | disk | FTP | other *** search
/ ...taking it to the Macs! / ...taking it to the Macs!.iso / Extras / ActiveX Mac SDK / ActiveX SDK / Headers / STORAGE.H < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-22  |  14.3 KB  |  485 lines  |  [TEXT/????]

  1. /*****************************************************************************\
  2. *                                                                             *
  3. * storage.h -   Definitions for the strutured storage system
  4. *                                                                             *
  5. *               OLE Version 2.0                                               *
  6. *                                                                             *
  7. *               Copyright (c) 1992-1994, Microsoft Corp. All rights reserved. *
  8. *                                                                             *
  9. \*****************************************************************************/
  10.  
  11.  
  12. #if !defined(__STORAGE__) && !defined( _STORAGE_H_ )
  13. #define __STORAGE__
  14. #define _STORAGE_H_
  15.  
  16. #if !defined( __MACPUB__ )
  17. #include <macpub.h>
  18. #endif
  19.  
  20. #ifndef __COMPOBJ__
  21. #include <compobj.h>
  22. #endif
  23.  
  24. /****** Storage Error Codes *************************************************/
  25.  
  26. /* DOS-based error codes */
  27. #define STG_E_INVALIDFUNCTION \
  28.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x01)
  29.  
  30. #define STG_E_FILENOTFOUND \
  31.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x02)
  32.  
  33. #define STG_E_PATHNOTFOUND \
  34.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x03)
  35.  
  36. #define STG_E_TOOMANYOPENFILES \
  37.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x04)
  38.  
  39. #define STG_E_ACCESSDENIED \
  40.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x05)
  41.  
  42. #define STG_E_INVALIDHANDLE \
  43.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x06)
  44.  
  45. #define STG_E_INSUFFICIENTMEMORY \
  46.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x08)
  47.  
  48. #define STG_E_INVALIDPOINTER \
  49.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x09)
  50.  
  51. #define STG_E_NOMOREFILES \
  52.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x12)
  53.  
  54. #define STG_E_DISKISWRITEPROTECTED \
  55.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x13)
  56.  
  57. #define STG_E_SEEKERROR \
  58.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x19)
  59.  
  60. #define STG_E_WRITEFAULT \
  61.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x1d)
  62.  
  63. #define STG_E_READFAULT \
  64.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x1e)
  65.  
  66. /* 20a */
  67.  
  68. #define STG_E_SHAREVIOLATION \
  69.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x20)
  70.  
  71. /* 20a */
  72. #define STG_E_LOCKVIOLATION \
  73.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x21)
  74.  
  75. #define STG_E_FILEALREADYEXISTS \
  76.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x50)
  77.  
  78. #define STG_E_INVALIDPARAMETER \
  79.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x57)
  80.  
  81. #define STG_E_MEDIUMFULL \
  82.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x70)
  83.  
  84. #define STG_E_ABNORMALAPIEXIT \
  85.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfa)
  86.  
  87. #define STG_E_INVALIDHEADER \
  88.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfb)
  89.  
  90. #define STG_E_INVALIDNAME \
  91.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfc)
  92.  
  93. #define STG_E_UNKNOWN \
  94.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfd)
  95.  
  96. #define STG_E_UNIMPLEMENTEDFUNCTION\
  97.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfe)
  98.  
  99. #define STG_E_INVALIDFLAG \
  100.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xff)
  101.  
  102. /* Standard storage error codes */
  103. #define STG_E_INUSE \
  104.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x100)
  105.  
  106. #define STG_E_NOTCURRENT \
  107.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x101)
  108.  
  109. #define STG_E_REVERTED \
  110.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x102)
  111.  
  112. #define STG_E_CANTSAVE \
  113.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x103)
  114.  
  115. #define STG_E_OLDFORMAT \
  116.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x104)
  117.     
  118. #define STG_E_OLDDLL \
  119.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x105)
  120.  
  121. #define STG_E_SHAREREQUIRED \
  122.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x106)
  123. /* 20a */
  124.  
  125. #define STG_E_NOTFILEBASEDSTORAGE \
  126.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x107)
  127.  
  128. #define STG_E_EXTANTMARSHALLINGS \
  129.     MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x108)
  130.  
  131. /* 20a */
  132.  
  133. /* Information returns */
  134. #define STG_S_CONVERTED \
  135.     MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_STORAGE, 0x200)
  136.  
  137.  
  138. /****** Storage types *******************************************************/
  139.  
  140.  
  141. #define CWCSTORAGENAME 32
  142.  
  143. /* Storage instantiation modes */
  144. #define STGM_DIRECT     0x00000000L
  145. #define STGM_TRANSACTED     0x00010000L
  146.  
  147. #define STGM_READ       0x00000000L
  148. #define STGM_WRITE      0x00000001L
  149. #define STGM_READWRITE      0x00000002L
  150.  
  151. #define STGM_SHARE_DENY_NONE    0x00000040L
  152. #define STGM_SHARE_DENY_READ    0x00000030L
  153. #define STGM_SHARE_DENY_WRITE   0x00000020L
  154. #define STGM_SHARE_EXCLUSIVE    0x00000010L
  155.  
  156. #define STGM_PRIORITY       0x00040000L
  157. #define STGM_DELETEONRELEASE    0x04000000L
  158.  
  159. #define STGM_CREATE     0x00001000L
  160. #define STGM_CONVERT        0x00020000L
  161. #define STGM_FAILIFTHERE    0x00000000L
  162.  
  163. /* Storage commit types */
  164. typedef enum tagSTGC
  165. {
  166.     STGC_DEFAULT = 0,
  167.     STGC_OVERWRITE  = 1,
  168.     STGC_ONLYIFCURRENT  = 2,
  169.     STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4
  170.     ,STGC_FORCELONG    =    2147483647
  171. } STGC;
  172.  
  173. /* Stream name block definitions */
  174. typedef char  *  *SNB;
  175.  
  176.  
  177. #ifndef _WINDOWS_
  178. #ifndef _FILETIME_
  179. #define _FILETIME_
  180. typedef struct FARSTRUCT tagFILETIME
  181. {
  182.     unsigned long dwLowDateTime;
  183.     unsigned long dwHighDateTime;
  184. } FILETIME;
  185. #endif
  186. #endif
  187.  
  188.  
  189. /* Storage stat buffer */
  190.  
  191. typedef struct FARSTRUCT tagSTATSTG
  192. {
  193.     char *    pwcsName;
  194.     FSSpec        *pspec;
  195.     unsigned long type;
  196.     ULARGE_INTEGER cbSize;
  197.     FILETIME mtime;
  198.     FILETIME ctime;
  199.     FILETIME atime;
  200.     unsigned long grfMode;
  201.     unsigned long grfLocksSupported;
  202.     CLSID clsid;
  203.     unsigned long grfStateBits;
  204.     unsigned long reserved;
  205. } STATSTG;
  206.  
  207.  
  208. /* Storage element types */
  209. typedef enum tagSTGTY
  210. {
  211.     STGTY_STORAGE   = 1,
  212.     STGTY_STREAM    = 2,
  213.     STGTY_LOCKBYTES = 3,
  214.     STGTY_PROPERTY  = 4
  215.     ,STGTY_FORCELONG    =    2147483647
  216. } STGTY;
  217.  
  218. typedef enum tagSTREAM_SEEK
  219. {
  220.     STREAM_SEEK_SET = 0,
  221.     STREAM_SEEK_CUR = 1,
  222.     STREAM_SEEK_END = 2
  223.     ,STREAM_SEEK_FORCELONG    =    2147483647
  224. } STREAM_SEEK;
  225.  
  226. typedef enum tagLOCKTYPE
  227. {
  228.     LOCK_WRITE      = 1,
  229.     LOCK_EXCLUSIVE  = 2,
  230.     LOCK_ONLYONCE   = 4
  231.     ,LOCKTYPE_FORCELONG    =    2147483647
  232. } LOCKTYPE;
  233.  
  234. typedef enum tagSTGMOVE
  235. {
  236.     STGMOVE_MOVE    = 0,
  237.     STGMOVE_COPY    = 1
  238.     ,STGMOVE_FORCELONG    =    2147483647
  239. } STGMOVE;
  240.  
  241. typedef enum tagSTATFLAG
  242. {
  243.     STATFLAG_DEFAULT = 0,
  244.     STATFLAG_NONAME = 1
  245.     ,STATFLAG_FORCELONG    =    2147483647
  246. } STATFLAG;
  247.  
  248. /****** Storage Enumerators *************************************************/
  249.  
  250. #undef  INTERFACE
  251. #define INTERFACE   IEnumSTATSTG
  252.  
  253. DECLARE_INTERFACE_(IEnumSTATSTG, IUnknown)
  254. {
  255.     BEGIN_INTERFACE
  256.     /* *** IUnknown methods *** */
  257.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  258.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  259.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  260.  
  261.     /* *** IENUMSTATSTG methods *** */
  262.     STDMETHOD(Next) (THIS_ unsigned long celt, STATSTG  * rgelt, unsigned long  *pceltFetched) PURE;
  263.     STDMETHOD(Skip) (THIS_ unsigned long celt) PURE;
  264.     STDMETHOD(Reset) (THIS) PURE;
  265.     STDMETHOD(Clone) (THIS_ IEnumSTATSTG  * *ppenm) PURE;
  266. };
  267.  
  268. typedef IEnumSTATSTG* LPENUMSTATSTG, ** LPLPENUMSTATSTG;
  269.  
  270.  
  271.  
  272. /****** ILockBytes Interface ************************************************/
  273.  
  274. #undef  INTERFACE
  275. #define INTERFACE   ILockBytes
  276.  
  277. DECLARE_INTERFACE_(ILockBytes, IUnknown)
  278. {
  279.     BEGIN_INTERFACE
  280.  
  281.     /* *** IUnknown methods *** */
  282.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  283.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  284.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  285.  
  286.     /* *** ILockBytes methods *** */
  287.     STDMETHOD(ReadAt) (THIS_ ULARGE_INTEGER ulOffset,
  288.              void *pv,
  289.              unsigned long cb,
  290.              unsigned long  *pcbRead) PURE;
  291.     STDMETHOD(WriteAt) (THIS_ ULARGE_INTEGER ulOffset,
  292. #if !defined(__cplusplus)
  293.               void *pv,
  294. #else
  295.               void const *pv,
  296. #endif
  297.               unsigned long cb,
  298.               unsigned long  *pcbWritten) PURE;
  299.     STDMETHOD(Flush) (THIS) PURE;
  300.     STDMETHOD(SetSize) (THIS_ ULARGE_INTEGER cb) PURE;
  301.     STDMETHOD(LockRegion) (THIS_ ULARGE_INTEGER libOffset,
  302.                  ULARGE_INTEGER cb,
  303.                  unsigned long dwLockType) PURE;
  304.     STDMETHOD(UnlockRegion) (THIS_ ULARGE_INTEGER libOffset,
  305.                    ULARGE_INTEGER cb,
  306.                  unsigned long dwLockType) PURE;
  307.     STDMETHOD(Stat) (THIS_ STATSTG  *pstatstg, unsigned long grfStatFlag) PURE;
  308. };
  309.  
  310. typedef ILockBytes * LPLOCKBYTES, ** LPLPLOCKBYTES;
  311.  
  312.  
  313.  
  314. /****** IStream Interface ***************************************************/
  315.  
  316.  
  317. #undef  INTERFACE
  318. #define INTERFACE   IStream
  319.  
  320. DECLARE_INTERFACE_(IStream, IUnknown)
  321. {
  322.     BEGIN_INTERFACE
  323.     /* *** IUnknown methods *** */
  324.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  325.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  326.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  327.  
  328.     /* *** IStream methods *** */
  329.     STDMETHOD(Read) (THIS_ void *pv,
  330.              unsigned long cb, unsigned long  *pcbRead) PURE;
  331.     STDMETHOD(Write) (THIS_ 
  332. #if !defined(__cplusplus)
  333.             void *pv,
  334. #else
  335.             void const *pv,
  336. #endif
  337.             unsigned long cb,
  338.             unsigned long  *pcbWritten) PURE;
  339.     STDMETHOD(Seek) (THIS_ LARGE_INTEGER dlibMove,
  340.                unsigned long dwOrigin,
  341.                ULARGE_INTEGER  *plibNewPosition) PURE;
  342.     STDMETHOD(SetSize) (THIS_ ULARGE_INTEGER libNewSize) PURE;
  343.     STDMETHOD(CopyTo) (THIS_ IStream  *pstm,
  344.              ULARGE_INTEGER cb,
  345.              ULARGE_INTEGER  *pcbRead,
  346.              ULARGE_INTEGER  *pcbWritten) PURE;
  347.     STDMETHOD(Commit) (THIS_ unsigned long grfCommitFlags) PURE;
  348.     STDMETHOD(Revert) (THIS) PURE;
  349.     STDMETHOD(LockRegion) (THIS_ ULARGE_INTEGER libOffset,
  350.                  ULARGE_INTEGER cb,
  351.                  unsigned long dwLockType) PURE;
  352.     STDMETHOD(UnlockRegion) (THIS_ ULARGE_INTEGER libOffset,
  353.                  ULARGE_INTEGER cb,
  354.                  unsigned long dwLockType) PURE;
  355.     STDMETHOD(Stat) (THIS_ STATSTG  *pstatstg, unsigned long grfStatFlag) PURE;
  356.     STDMETHOD(Clone)(THIS_ IStream  *  *ppstm) PURE;
  357. };
  358.  
  359. //typedef IStream * LPSTREAM, ** LPLPSTREAM;
  360.  
  361. /****** IStorage Interface **************************************************/
  362.  
  363.  
  364. #undef  INTERFACE
  365. #define INTERFACE   IStorage
  366.  
  367. DECLARE_INTERFACE_(IStorage, IUnknown)
  368. {
  369.     BEGIN_INTERFACE
  370.     /* *** IUnknown methods *** */
  371.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  372.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  373.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  374.  
  375.     /* *** IStorage methods *** */
  376.     STDMETHOD(CreateStream) (THIS_ const char * pwcsName,
  377.                    unsigned long grfMode,
  378.                    unsigned long reserved1,
  379.                    unsigned long reserved2,
  380.                    IStream  * *ppstm) PURE;
  381.     STDMETHOD(OpenStream) (THIS_ const char * pwcsName,
  382.          void  *reserved1,
  383.                  unsigned long grfMode,
  384.                  unsigned long reserved2,
  385.                  IStream  * *ppstm) PURE;
  386.     STDMETHOD(CreateStorage) (THIS_ const char * pwcsName,
  387.                 unsigned long grfMode,
  388.                 unsigned long reserved1,
  389.                 unsigned long reserved2,
  390.                 IStorage  * *ppstg) PURE;
  391.     STDMETHOD(OpenStorage) (THIS_ const char * pwcsName,
  392.                   IStorage  *pstgPriority,
  393.                   unsigned long grfMode,
  394.                   SNB snbExclude,
  395.                   unsigned long reserved,
  396.                   IStorage  * *ppstg) PURE;
  397.     STDMETHOD(CopyTo) (THIS_ unsigned long ciidExclude,
  398. #if !defined(__cplusplus)
  399.                 IID *rgiidExclude,
  400. #else
  401.                 IID const  *rgiidExclude,
  402. #endif
  403.                 SNB snbExclude,
  404.                 IStorage  *pstgDest) PURE;
  405.     STDMETHOD(MoveElementTo) (THIS_ 
  406.                         const char * lpszName,
  407.                         IStorage  *pstgDest,
  408.                            const char  * lpszNewName,
  409.                               unsigned long grfFlags) PURE;
  410.     STDMETHOD(Commit) (THIS_ unsigned long grfCommitFlags) PURE;
  411.     STDMETHOD(Revert) (THIS) PURE;
  412.     STDMETHOD(EnumElements) (THIS_ unsigned long reserved1,
  413.                  void  *reserved2,
  414.                  unsigned long reserved3,
  415.                  IEnumSTATSTG  * *ppenm) PURE;
  416.     STDMETHOD(DestroyElement) (THIS_ const char * pwcsName) PURE;
  417.     STDMETHOD(RenameElement) (THIS_ const char * pwcsOldName,
  418.                 const char * pwcsNewName) PURE;
  419.     STDMETHOD(SetElementTimes) (THIS_ const char  *lpszName,
  420.                                    const FILETIME  *pctime,
  421.                                 const FILETIME  *patime,
  422.                                 const FILETIME  *pmtime) PURE;
  423.     STDMETHOD(SetClass) (THIS_ REFCLSID clsid) PURE;
  424.     STDMETHOD(SetStateBits) (THIS_ unsigned long grfStateBits, unsigned long grfMask) PURE;
  425.     STDMETHOD(Stat) (THIS_ STATSTG  *pstatstg, unsigned long grfStatFlag) PURE;
  426. };
  427.  
  428. //typedef IStorage * LPSTORAGE, ** LPLPSTORAGE;
  429.  
  430.  
  431.  
  432. /****** IRootStorage Interface **********************************************/
  433.  
  434. #undef  INTERFACE
  435. #define INTERFACE   IRootStorage
  436.  
  437. DECLARE_INTERFACE_(IRootStorage, IUnknown)
  438. {
  439.     BEGIN_INTERFACE
  440.     /* *** IUnknown methods *** */
  441.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void * * ppvObj) PURE;
  442.     STDMETHOD_(unsigned long,AddRef) (THIS)  PURE;
  443.     STDMETHOD_(unsigned long,Release) (THIS) PURE;
  444.  
  445.     /* *** IRootStorage methods *** */
  446.     STDMETHOD(SwitchToFile) (THIS_ char * lpstrFile) PURE;
  447. };
  448.  
  449. typedef IRootStorage * LPROOTSTORAGE, ** LPLPROOTSTORAGE;
  450.  
  451.  
  452.  
  453. /****** Storage API Prototypes ********************************************/
  454.  
  455. STDAPI StgCreateDocfile(const char * pwcsName,
  456.             unsigned long grfMode,
  457.             unsigned long reserved,
  458.             IStorage  *  *ppstgOpen);
  459. STDAPI StgCreateDocfileOnILockBytes(ILockBytes  *plkbyt,
  460.                     unsigned long grfMode,
  461.                     unsigned long reserved,
  462.                     IStorage  *  *ppstgOpen);
  463. STDAPI StgOpenStorage(const char * pwcsName,
  464.               IStorage  *pstgPriority,
  465.               unsigned long grfMode,
  466.               SNB snbExclude,
  467.               unsigned long reserved,
  468.               IStorage  *  *ppstgOpen);
  469. STDAPI StgOpenStorageOnILockBytes(ILockBytes  *plkbyt,
  470.                   IStorage  *pstgPriority,
  471.                   unsigned long grfMode,
  472.                   SNB snbExclude,
  473.                   unsigned long reserved,
  474.                   IStorage  *  *ppstgOpen);
  475. STDAPI StgIsStorageFile(const char * pwcsName);
  476. STDAPI StgIsStorageILockBytes(ILockBytes * plkbyt);
  477.  
  478. STDAPI StgSetTimes( const char * lpszName,
  479.                       const FILETIME * pctime,
  480.                       const FILETIME * patime,
  481.                       const FILETIME * pmtime);
  482.  
  483. #endif /* __STORAGE__ */
  484.  
  485.